<?php
/**
 * 公共函数库
 */

/**
 * 本类用于获取树状结构数据
 * @param  array   $data       待处理的数组
 * @param  string  $pk         主键字段名称
 * @param  string  $parent_key 父id字段名称
 * @param  integer $pid        父id
 * @return array               返回树状结构数组
 */
function getTree( $data, $pk, $parent_key, $pid=0 ) {
	
	//如果参数有误就返回一个空数组
	if( !isset($data) || !is_array($data) || !isset($pk) || !isset($parent_key) ) return array();

	//拼凑数组
	$arr = [];
	foreach ($data as $v) {
		if($v[$parent_key] == $pid) {

			$arr[] = $v;
			$arr= array_merge( $arr,getTree($data,$pk, $parent_key,$v[$pk]) );
		}
	}

	//返回数组
	return $arr;
}
/**
 * 本类用于获取带有层级的树状结构数据
 * @param  array   $data       待处理的数组
 * @param  string  $pk         主键字段名称
 * @param  string  $parent_key 父id字段名称
 * @param  integer $pid        父id
 * @return array               返回带有层级的树状结构数组
 */
function getLevelTree( $data, $pk, $parent_key, $pid=0,$level=0 ) {
	
	$arr = [];
	
	foreach ($data as $v) {

		if( $v[$parent_key] == $pid ) {

			$v['level'] =$level;

			$arr[]=$v;
			
			$arr = array_merge($arr, getLevelTree( $data, $pk, $parent_key, $v[$pk],$level+1 ));

		}
		
	}

	return $arr;

}

function getChildren( $data, $pk, $parent_key, $pid=0 ) {

	$arr = [];

	foreach ($data as $k => $v) {

		if( $v[$parent_key] == $pid) {

			$v['child']= getChildren( $data, $pk, $parent_key, $v[$pk] );

			$arr[] = $v;

		}
		
	}

	return $arr;

}

/**
 * 获取某个字段的列表信息
 * @param  array  $arr   待处理的数组
 * @param  intval $pk    主键
 * @param  string $field 要变成列表样式的字段名
 * @return array         返回处理后的数组
 */
function getListMeg( $arr, $pk, $field ){

	//如果不是数组就返回
	if( !is_array($arr) ) return false;

	//临时数组
	$temp = [];

	//根据主键和要变成列表形式的字段拼凑数据
	foreach ($arr as $v) {

		//判断数组中是否存在
		if( isset( $temp[$v[$pk]] ) ) {
			
			//如果数组中已经存在，就拼凑列表
			$temp[$v[$pk]][$field].=','.$v[$field];

		}else {

			//不存在就根据主键放入数组
			$temp[$v[$pk]] = $v;
		}

	}

	//返回整理好的数组
	return $temp;
}

/**
 * 将在数据库中获取的二维数组变成一维数组
 * @param  array  $arr   待处理的数组
 * @param  string $field 要变成列表样式的字段名
 * @return array         返回处理后的数组
 */
function getOneArr( $arr, $field=null ){

	//如果不是数组就返回
	if( !is_array($arr) ) return false;

	//临时数组
	$temp = [];

	//根据主键和要变成列表形式的字段拼凑数据
	foreach ($arr as $v) {

		foreach ($v as $k2 => $v2) {

			//判断数组中是否存在
			if( $k2==$field ) {
				
				//如果数组中已经存在，就拼凑列表
				$temp[$field][]=$v2;

			}else if(!isset( $temp[$k2] )){

				if( $k2==$field ){

					//将要转成二维数组的字段变成一个数组，并将原值放入
					$temp[$field] = [ $v2 ];

				}else{

					//不存在就根据主键放入数组
					$temp[$k2] = $v2;
				}
			}
		}

	}

	//返回整理好的数组
	return $temp;
}
/**
 * 添加管理员日志
 * @param  [type] $aid     [description]
 * @param  [type] $content [description]
 * @param  [type] $sql     [description]
 * @return [type]          [description]
 */
function adminLog( $aid, $content, $sql ){

	$logModel = new app\admin\controller\Log();

	$logModel->add( $aid, $content, htmlspecialchars($sql) );

}

